perm filename UUO.UPD[S,DOC]143 blob
sn#809629 filedate 1986-02-05 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00015 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00004 00002 This file contains corrections, additions and updates to the UUO Manual,
C00005 00003 [ALL ENTRIES BEFORE THIS HAVE BEEN INCLUDED IN UUO MANUAL, THIRD EDITION.]
C00012 00004 187. The following new TTYSETs are defined:
C00048 00005 249. TTYSET operation number 41 is "hang up modem", only works on DCA
C00072 00006 295. The DPYPOS and LEYPOS UUOs now use (essentially) all 18 bits of
C00079 00007 310. Device VRN is the Varian Plotter, driven from P2. It can be
C00083 00008 315. The FILUSR UUO [CALLI 400046] can be used to find out what job(s)
C00086 00009 319. The following TTYSET functions are added:
C00091 00010 320. The sign bit of the XGP right margin word (in MTAPEs 2 and 3,
C00100 00011 327. Include the rest of the character codes for the Analex LPT
C00116 00012 348. There are now terminal-input macros available on all terminals.
C00133 00013 371. The IMP is now run using the IP/TCP protocols. The major differences
C00146 00014 385. IMP MTAPE 5, which under NCP returned pointers to system tables, now shows
C00154 00015 387. Device MTU0 is a TU-78 9-track magtape drive, capable of writing at
C00157 ENDMK
C⊗;
This file contains corrections, additions and updates to the UUO Manual,
including new UUOs that have been added since the manual went to press.
[ALL ENTRIES BEFORE THIS HAVE BEEN INCLUDED IN UUO MANUAL, THIRD EDITION.]
177. TTYSET function 17 (get responsible TTY) returns -1 if no TTY
is responsible. Also, if you look in the system (eg, via PEEK
or SETPR2) to find the terminal responsible for some TTY line,
a value of 12 (TTY12) for the responsible terminal really means
that no one is responsible for the particular TTY line.
178. [Obsolete. See item 201.]
A beep to a (responsible) non-ARPA PTY is a no-op.
179. Somehow this didn't make it into the third edition:
The SUPSOM bit (0,,1000) in the fourth word of a SETACT UUO
activation table suppresses the CONTROL and META bits on all
characters whose individual character bits are not on in the
activation table. This means that the activation table's
character bits are used for two purposes--in special activation
mode and in SUPSOM mode--but these two modes are not expected
to be in use at the same time. If SUPEOL is on, it takes
precedence over SUPSOM.
180. Error code 7 (GMM) to an IMP MTAPE means Gender MisMatch; ie, an
attempt to connect two like-gendered sockets together. Odd sockets
may only be connected to even sockets and vice versa.
181. XGP intercharacter spacing ('177 '1 '50 ICS) is now implemented.
It takes one 7-bit byte as the new value for intercharacter
spacing. The intercharacter spacing is set to zero when you INIT
the XGP, but is not reset to zero at any other time. The
intercharacter spacing value is the (positive) number of columns by
which the X-position is incremented after each normal text
character is printed (after the X-adjustment for character width).
It is possible that use of this feature may generate lines that are
too complex for XGPSER to print (usual warning).
182. The system now allows up to =128 fonts (font numbers from 0 to =127).
183. XGP MTAPE 7 is just like XGP MTAPE 1 (compiles a font) except that
a four-word table follows the font identification number to specify
which characters are to be loaded (compiled). In this four-word
table, each word contains the flag bits for =32 characters: the
first word contains the bits for characters '000 thru '037, the
next word for '040 thru '077, then '100 thru '137, and finally '140
thru '177. Within a given word, the flag bits occur from right to
left in order of increasing character code, with the high-order
four bits of each word ignored (those four bits should be zero).
Thus bit 35 (0,,1) of the first word is the flag bit for character
'000, bit 34 (0,,2) is the bit for '001, etc. If the flag bit for
a character is on, that character will be loaded when the given
font is compiled; otherwise the character will not be loaded and
any attempt to print that character in that font will be ignored.
This MTAPE accepts only the uncompiled (.FNT) font format. If the
given file holds a compiled-format (.CFT) font, then an error will
occur (illegal format file). If no filename extension is given and
no file has the given exact name, then only the additional
extension .FNT will be looked for -- no .CFT file will be used.
184. XGPUUO opcode 4 from the system to the Font Compiler is just like
opcode 2 except that words 5 through 10 (octal) of the data block
contain the four words from the user specifying which characters
are to be compiled, in the same format as in XGP MTAPE 7.
185. XGP ESCAPE 5 selects the font specified by the following 7-bit byte
(e.g., '177 '5 FONT).
186. The HNGTRP bit (bit 28--0,,200) in XGP I/O status word suppresses
halt with error message on hung XGP (and probably hung P2). UUOs
take error return instead when this bit is on (just like LPT).
187. The following new TTYSETs are defined:
23 get GAG bit
24 set GAG bit
25 get NO-CONVERT bit
26 set NO-CONVERT bit
These bits correspond to the commands TTY [NO] GAG and TTY [NO] CONVERT
except that TTY CONVERT clears the no-convert bit. The GAG bit prevents
anyone from linking to the terminal via the TALK command, and also
prevents TTYMES to the terminal (except TTYMES to SIXBIT /TTY/ from the
attached job). GAG does not prevent beeps. The no-convert bit
applies only to physical terminals (not PTYs) which are not displays;
when the bit is off (the default), the characters altmode, right brace,
tilde, and not-equal are converted on input and output as they are for
ARPAnet PTYs. This means also that when the bit is off, only octal 33
is interpreted as altmode on input. If you have an old model 33 you
may need to say TTY NO CONVERT or set this bit. TTYSETs 23 and 25
return the value 0 or 1 (all but bit 35 returned zero). 24 and 26
use bit 35 of the TTYSET command word to set the bit.
188. TTY image modes 10 and 11. These modes permit input and output of
all characters including null and ↑C, with no conversion, filling,
etc. If either of these modes is set in TTY IOS either by INIT or
by TTYSET (or SETSTS), then filling and code conversion are disabled
for any form of I/O, TTYUUO as well as buffered INPUT or OUTPUT. In
addition, beeps to the terminal are disabled. Further effects for
output: OUTCHR accepts 8-bit characters and does not generate
parity. (OUTSTR and other inherently 7-bit output methods still
generate parity.) For the OUT and OUTPUT UUOs, parity is not
generated, and nulls will be output, if and only if the byte size
of the byte pointer in the users buffer header is 9 or more. (The
user must set this after INITing the channel.) The number of
characters typed will be exactly the number deposited into the
buffer by the user, so padding nulls in the last word in use in the
buffer will not be sent. Further effects for input: The eighth
(parity) bit is made available to the user, and nulls are allowed.
The 400 bit will be on in all characters input, to allow nulls.
(A zero character is not allowed internally in the monitor.) This
bit may be ignored, except that it distinguishes a typed null from
a padding null in buffered input. (The user's buffer header must
specify a byte size of at least 9, of course, to see that bit.)
INCHRW and INCHRS will return 9-bit characters. The line-at-a-time
TTYUUOs (and RDLINE) should not be used while the TTY is in image
mode, since line activators are not well-defined. Modes 10 and 11
are exactly the same on output; the difference on input has to do
with when the program is awakened on an IN or INPUT UUO: in mode
10, the UUO will return when any number of characters (greater than
zero) are waiting; in mode 11, the program is not awakened until
the TTY input buffer is half full. The TTYSKP UUO can be used to
find out if an INPUT will return immediately. Modes 10 and 11 are
undefined for local (DD and III) display terminals; in particular,
they are not a good way to try to trap CALLs. However, they do work
on Datamedias; while a DM is in image mode, the DM output queues are
disabled, and output will come only from the TTY output buffer.
Also, the line editor is disabled for input, as are escape commands.
(NUL is passed to programs in this mode.)
189. The LOGIN UUO is legal only if JACCT is set, not whenever JLOG is off.
190. New UFD format:
words 0-3: same as before
4: file length in words
5: BYTE (15)date written in system date format (21)time written
in 15ths of a second after midnight *
6: last referenced date **
7: last dumped date **
10-11: not used (yet)
12: SATID (may be changed)
13-16: 4 words of special file info (as in disk MTAPEs 10 and 11)
17: file offset (1 less than first logical record # in the file)
* The low order bit of this word is 0 for PST and 1 for PDT.
This date is always in Pacific Standard Time.
** These two words have the same format as they do in long LOOKUP blocks.
This format does not apply to the MFD.
191. New disk MTAPE 26:
MTAPE CHN,[ 'GODMOD'
26
'filename'
'extension',,ERROR CODE
UNUSED (must be zero)
'ppn'
ADDRESS OF 20 WORD BLOCK FOR UFD ENTRY TO BE STORED IN
]
ERROR RETURN
SUCCESS RETURN
Does a LOOKUP using the given information, but instead of storing what's
normally put in a lookup block, it stores the 20 word ufd entry starting
at the address specified in the MTAPE block. If the file being looked up
is a UFD, the system generates a "ufd" entry and stores that rather than
the actual entry from the MFD. If the LOOKUP fails, then nothing is
stored except the ERROR CODE, which should be interpreted the same as the
the ERROR CODE for a normal LOOKUP.
192. Include NEWPRV.JBR[S,DOC].
193. TTYSET 27 and TTYSET 30 are get and set, respectively, for the
"no-peek" bit. This bit is totally unused by the monitor, but is
set by LOGIN and other programs that read passwords during the
time a password is in the TTY input buffer. The PK program reads
this bit and doesn't display the TTY's input buffer when it's on.
194. New disk MTAPE 27:
MTAPE CHN,[ SIXBIT /GODMOD/
27
UFD'S PROTECTION WORD STORED HERE
UFD'S FILE INFO WORD 3 STORED HERE (DEFAULT PRO/GRP ACCESS)
]
ERROR RETURN, NO LOOKUP DONE
SUCCESS RETURN
If a LOOKUP has been done on CHN, then the MTAPE returns the protection word
and the default protection/group access word of the UFD of the file looked up.
If the file itself is a UFD then the "UFD" protection word is that of the MFD
but the "UFD" default protection/group access word is that of the UFD (i.e.,
the file looked up) itself.
195. Update page 164 describing the 4 words of special info stored for a UFD on
the disk:
word 3: bits 10:35 are the group access bits for the UFD.
196. "JOBNM1" at top of on p. 253 (Job Data Area) should be "JOBTM1".
197. New low core pointer, location 261 points to the cell DAYLIT which
is non-zero for daylight savings time.
198. ENTER no longer lets you set the creation date of a file. It is set
to the current date when the ENTER creates the file, and is copied
from the old version when the ENTER supercedes a file.
199. New UUO: STDTIM AC, (CALLI 400055) is like ACCTIM but returns Pacific
Standard Time.
200. New XGP MTAPEs.
MTAPE <chan>,ADR
ADR: 10
<number of scan lines output is returned here>
MTAPE 10 returns the number of scan lines queued for output to the
XGP since you inited the XGP.
MTAPE <chan>,ADR
ADR: 11
<number of real formfeeds already output is returned here>
MTAPE 11 returns the number of formfeeds (014's) that you have output
that have already been sent to the XGP (not just queued -- however,
the actual paper cut occurs about 25 seconds after the formfeed
itself has been sent).
201. PTYs are initialized with the GAG bit on. The GAG bit is checked
when the monitor decides whether or not to permit a TTYMES or BEEP
to a PTY. IMPBIT is no longer checked in this regard. When a BEEP
to a PTY is GAGged, the BEEP is given instead to the job owning the
PTY. BEEPs are never GAGged on non-PTYs.
202. The GETPPN UUO, when given by a job with JACCT set, ignores jobs
which don't have JLOG set in deciding whether or not to take the
skip return.
203. When a spacewar module is started, AC 7 contains the protection of
the upper segment.
204. The SWAP UUO, when starting a new job, will set the alias of the
new job equal to that of the old job iff the PPN specified for the
new job (word 5 of the argument block) is zero. (Otherwise the
new job is started with no alias, as before.)
205. Typo on p. 84. Sample UUO call "SHOWIT AC" should be "SHOWIT AC,".
206. XGP appendix should explain difference between mode 0 and mode 13.
(Which I think is that in mode 13 the byte size is 36.)
207. TTYSET function 31 clears the line editor if the terminal is a display.
208. XGP ESCAPE 6 is "select font and align at top". '177 '6 <font number>.
A relative baseline adjust is done to make the newly selected font
line up at the top with the top of the previously selected font,
unless no chars have been output on the current text line, in which
case XGP ESCAPE 6 is the same as XGP ESCAPE 5 (font select).
209. Any file LOOKUP error from a SWAP UUO trying to start up a new job
stops the new job, not the old one.
210. The INTIMS interrupt is given to the logger when an "interesting" RFC
(ie, 1≤socket≤777 and socket is odd) comes in. No network channels
need be opened (in fact, the logger doesn't have any channels open).
A job becomes the logger by setting the "LOGGER" cell in the system.
211. The LGONCE bit (4000,,0) in the IMPSTB word says that the logger has
already looked at this socket. The system doesn't use this bit, but
the user mode logger sets and uses it to avoid trying to service the
same RFC twice.
212. Following a conversation with Postel, interesting sockets now stop at
377 instead of 777; sockets 400 and up are "private sockets".
213. Sockets may be gensymmed by using -1 in the connect MTAPE block instead
of a socket number. A gensymmed socket is picked such that the next 5
sockets are free.
214. Spacewar process timeout causes the job to get SPACEWAR LOSSAGE and to
to be stopped.
215. Note that since the PTOCNT UUO gives you the number of characters in
the output buffer, and since characters are transmitted on DMs from
the DM queues instead of from the output buffer, you cannot use the
PTOCNT UUO on a DM to decide whether or not the next PTRDS UUO will
wait. See item 221 below for the solution to this problem on DMs
(also useful on other PTYs).
216. IMP MTAPE 21 will return a gensymmed receive socket. Gensymmed sockets
are picked so the next 7 sockets (ie, a cluster of 8. sockets) are free
as well as the gensym one. The socket is returned in the second word
of the MTAPE block.
217. Note that only receive sockets may be gensymmed by IMP MTAPE 1. An
attempt to gensym a send socket will return the GMM error. There
shouldn't be any reason why somebody would want to gensym a send
socket, of course, nothing prevents doing an MTAPE 21 and adding 1 to
the returned value.
218. SIXSER sends a 0 and a -1 in the date message to verify all bits.
219. New TTYSETs:
32 gets the temporary gag bit
33 sets the temporary gag bit to given value in low-order
bit of the function word. The temporary gag bit is
automatically cleared by the RESET UUO.
34 makes the tty an IMP tty (sets IMPBIT) provided it is a pty.
35 makes the tty a DM (sets DMLIN) provided it isn't already a display.
On setting IMPBIT and DMLIN:
It is now impossible to set either of these two line characteristics
bits with the SETLIN or PTSETL UUOs or TTYSET function 1. Only the
two new TTYSET functions (34 and 35), which explicitly set these
respective bits, are legal. So if you have any programs that try to
set either of these bits, you should convert to using the new TTYSET
functions. There is no indication of failure by SETLIN, etc., to set
these bits other than the fact that the bits don't get set.
220. PTWR1S/W uuos can no longer send ESCAPE/BREAK/CLEAR characters. An
attempt to do such gets illegal uuo error message. TTYSET function 4
should be used to send escape commands, and TTYSET function 31 can be
used to clear the line editor.
221. PTRDS UUO will never wait (not even for the first char) if the 40,,0
bit is on in the byte pointer/address word that points to the place
for the returned string.
222. The functions of the LOGGER are now in the monitor. The exec mode
logger is disabled from firing up servers if MAINTM is set. The
job name = [LOGR] mechanism is gone. The INTIMS mechanism still
exists for the special user mode logger, which is normally not run.
223. IMP MTAPE 13 has been recycled to mean "curse IMP". It brings the
NCP down and sets a flag to keep it down until an IMP MTAPE 12 is
done. MTAPE 13 requires an argument of SIXBIT/KILIMP/. It is an
Illegal UUO if it is not given this argument.
224. Using ARPAnet sockets which are not in your working set as defined
by the gensym mechanism is now reported on the CTY and on the user's
console. It is not an error to do so (yet). The UPG privilege
prevents this message (ie, programs which wish to use arbitrary
absolute sockets should enable UPG first). [yes, I know it's a
crock]
225. An IMP going down message no longer brings down the NCP in itself.
It does print a warning message on the console though. Later on
it will warn users too.
226. The NCP will now reliably go down when the IMP goes down.
227. TTYSET 36 and 37 get and set the TTY GLASS bit. If the bit is on,
rubout echos as bs-sp-bs instead of using the backslash notation.
Ignored on displays.
228. The NCP will now reliably go up when the IMP comes up.
229. OBSOLETE.
230. New KILL UUO for the spy to autologout inactive jobs. Killer job
must have the MESPRV or this UUO won't do anything.
MOVEI AC,<job number>
KILL AC,
231. New DETACH function for PTJOBX UUO (function 10) detaches
the job that is on a given tty.
PTJOBX ADDR
ADDR: <tty/pty to affect>
10 ;or SIXBIT /DETACH/
This function skips on success (including if there is no job on the
given tty). The direct return is taken if there is already a
forced monitor command pending for the given tty (in which case,
you can try again momentarily and it will probably work).
232. SUPACT, SUPSCM, SUPALL, SUPSOM bits in SETACT UUO's fourth word
all work for non-displays as well as for displays.
233. PTY writing UUOs can send 9-bit chars except to a PTY owned by
the job giving the UUO. The chars ↑C, ↑B, ↑U, etc., which are
normally intercepted specially by the monitor for control
functions, are interpreted as SU-AI graphic chars instead when PTY
written by a non-owner (e.g., when PTY written to self). The owner
job can use the Backnext commands (e.g., ↑←C) to cause bucky bits
to be added to characters and to send the graphic chars ↑C, ↑B, ↑U,
etc. "Owned" means the job got the PTY by PTYGET UUO.
234. IMP MTAPE 23 takes an argument of a host down code, as follows:
RH: Time expected back up:
007777 bits → when we are expected back up. 7776 means unknown,
7777 means over a week from now. Otherwise:
007000 bits → day of week (0 = Monday, etc.)
000760 bits → hour
000017 bits → minutes/5
Time is in GMT.
LH: Why we are unavailable:
000017 Host dead reason:
0 → IMP sets this (random network lossage)
1 → IMP sets this (we took down ready without saying why)
2 → IMP sets this (we are tardy)
3 → IMP sets this (we don't exist to the knowledge of the NCC!)
4 → NCP initialization
5 → Scheduled preventative maintenance
6 → Scheduled hardware work
7 → Scheduled software work
10 → Emergency restart
11 → Power outage
12 → Software breakpoint
13 → Hardware failure
14 → Not scheduled up
15 → unused
16 → unused
17 → Coming up now
The 777700,,770000 bits are ignored. This UUO is used to tell the IMP
why we are down for later when we go down.
235. The NUL: device now exists. It is a black hole; on input it
provides an immediate EOF and simply slurps up and discards all
output.
NUL: simulates most devices reasonably, however it has the
device characteristics of no device (except that it can do input,
output, and has a long dispatch table). Also, you shouldn't
expect the more esoteric UUOs for these devices to necessarily
"do the right thing" (like IMP MTAPEs!). ENTER, LOOKUP, RENAME,
will always skip return without any argument checking, and USETO,
USETI, UGETF, CLOSE, UTPCLR, and MTAPE are no-ops.
236. Don't expect the 777400,,770000 bits in IMP MTAPE 22 to be zero, although
this is usually the case.
237. The TTYUSE bit, bit 5 (10000,,0), is no longer returned by the DEVCHR
UUO (apparently it hasn't been since 1975).
238. IMP MTAPE 22 sends a reset to the host in the first word of the argument
block. It requires the job to enable UPG. Don't do this unless you know
what you're doing. The other dangerous IMP MTAPEs have been changed to
require the job to enable UPG (which any job can).
239. Reset Reply now purges our tables the way reset does. A heinous bug
in reset fixed.
240. The IMP service now has full 96.-bit leaders and can address the full
range of hosts (all 2↑24 of them) on the network. Look at
IMPSER.DOC[SS,SYS] on page 9 for more details.
241. IMP MTAPE 7 has been changed to accept a listen-style block and return
one with the foreign host/socket filled in. The only use for it is to
know where to hack after a non-waiting listen.
242. IMP MTAPE 5 has been changed to return a set of addresses. It is only
really useful to IMPSTA. Look at IMPSER.DOC[SS,SYS] if you're really
interested in what these values are.
243. TTYSET 40 is SET SPEED for an auto-baud-detect line on the DCA
scanner. The allowed arguments are
0 110 baud
2 150 baud
3 300 baud
in the right half of the command word.
244. The following references to the value 20 in the UUO Manual should
substitute "DPYL0" for "20". The value DPYL0 is equal to SCNNUM
(the number of non-display TTYs), whose value is given in the
high-order 9 bits of the word at Low Core location 221.
(a) The TTREAD UUO's main description.
(b) The TTREAD UUO's description of bits 12:17.
(c) The description of Low Core location 237 (LETAB+20, should
be LETAB+DPYL0). Flush explicit name of first III's TTY.
(d) The description of Low Core location 303 (ASTAB).
245. The following references to the value 26 in the UUO Manual should
substitute "DDL0" for "26". The value DDL0 is equal to SCNNUM+DPYNUM.
The values of SCNNUM and DPYNUM are contained in the first two 9-bit
bytes of the word at Low Core location 221.
(a) The description of bits 11:17 in a Video Switch Request for
the VDSMAP UUO.
(b) The description of Low Core location 335 (VDTIE).
Also, the last example under the VDSMAP UUO should be changed to use
a different line number when TTY26 is no longer a DD.
Also, Low Core location 237 should be described as containing
LETAB+DPYL0, where DPYL0 is equal to SCNNUM (the first 9-bit byte
of Low Core 221).
Also, the description of Low Core location 270 (PTYJOB) should say to
index into the PTYJOB table with the PTY's line number minus PTYL0,
where PTYL0 is one more than the sum of the first three 9-bit bytes
in Low Core 221.
246. [Modified by entry 268 on next page.]
In buffered mode, an IN or INPUT UUO with a nonzero address field
(actually an address field ≥4) changes the buffer address of the
next buffer to be filled by the system to the address given. (The
specified value is stored in DEVIAD in the DDB.) It is the user's
responsibility to ensure that the address points to the second word
of a buffer in a well-formed buffer ring, and to update the 3-word
buffer ring header. The UUO does not actually do any input. The
proper sequence to move a buffer ring is
1. Do the IN CH,ADDR as described above
2. BLT the buffers, and modify the address pointers
3. The next IN (or INPUT) will use the new buffers.
It is not necessary to do a WAIT UUO before the IN CH,ADDR since
that UUO does a WAIT before modifying the address. Note that the
argument is the address of the next buffer into which the system
should transfer data, not the next buffer from which the user will
read data.
247. LASTDISASTERTIME now contains the time of the last call into EDDT,
in ACCTIM format. Parity errors also set this guy.
248. The status bits as returned by several IMP MTAPEs now includes the
following host down information.
Code=0 → Host up or down status unknown.
RH: Time expected back up:
777700 bits → when host is expected back up. 7776 means unknown,
7777 means over a week from now. Otherwise:
700000 bits → day of week (0 = Monday, etc.)
076000 bits → hour
001700 bits → minutes/5
Time is in GMT.
LH: Why host is unavailable:
000017 Host dead reason:
0 → unknown
1 → Host took ready line down without saying why
2 → Host is tardy
3 → Host does not exist (to the knowledge of the NCC)
4 → NCP initialization at the remote host
5 → Scheduled preventative maintenance
6 → Scheduled hardware work
7 → Scheduled software work
10 → Emergency restart
11 → Power outage
12 → Software breakpoint
13 → Hardware failure
14 → Not scheduled up
15 → unused
16 → unused
17 → Coming up now
000360 Host inaccessable reason:
0 → Destination IMP unreachable
1 → Destination host dead
2 → Communication with destination host is impossible,
because they don't have the extended leader capability
and some turkey moved us out of the 0-377 address range.
3 → Communication with destination host is prohibited
≥4 → unused
249. TTYSET operation number 41 is "hang up modem", only works on DCA
port with modem control. No-op if not implemented.
250. CALLI 400057 is WHOAMI. No argument. Compares your jobname to a list
of jobnames the system knows about; if you're in the list it saves
your job number in a cell in the system for whatever purpose the
system has in mind. However, if there is already a job that has
claimed to be who you are claiming to be, then the other job continues
and your job is stopped with an error message. So far the only name
in the list is WHOPHN, for the phantom job which writes the display on
the available channel. RESET clears the cell if you are the magic
job.
251. Include DLNSER.DOC[SS,SYS].
252. TTYSET setting operations can be performed on specific TTYs just like
getting operations -- the 400,,0 bit must be on and the TTY number
should be in the 177,,0 bits of the function word. However, you can
do setting operations only on TTYs that are yours (i.e., (1) the TTY
your job is running on, (2) an INITed or ASSIGNed TTY, or (3) a PTY
that you own). Setting operations on other TTYs are no-ops, with no
indication of failure.
253. In the UPGIOT UUO for a DM, the DMATXY bit (200,,0) in the left half of
the first header word means that when this user display program finishes,
any entries in the wholine queue for this DM should be flushed (to
establish cursor stability briefly). Also, the DMXLE bit (100,,0)
will suppress all but UPGIOT output to the DM until this transfer
has finished. This is needed if this transfer is a text shifting
operation and you want to position the line editor somewhere in the
middle of the screen *after* the shifting is finished but you want
to use overlapped mode instead of waiting for the shift to finish.
Note also that the DMXLE bit on in a user program header block flag word
means that user program output is given highest priority until the given
user display program has finished. Thus the line editor and page printer
cannot even start before the user program, much less interrupt it.
254. Setting a TTY's WIDTH value to ddd, where =128 ≤ ddd ≤ =255,
completely suppresses the monitor's normal insertion of CRLFs for
long lines on the TTY. The TTY width can be set with TTYSET UUO
function 5 and with the TTY WIDTH command.
255. DEVOAD and DEVIAD no longer contain PROG in index field (LH);
haven't for a long time.
256. The CORE UUO does not guarantee that new core is zeroed before being
given to the user job; in fact, it is likely to contain randomness.
A properly written user program isn't be affected by this.
257. TTYSETs 42 and 43 get and set, respectively, the job number whose
wholine is displayed on the given terminal. Function 42 returns -1
if the terminal is not a display.
258. When displaying in graphics mode on DDs, one has to display every
fourth line in order to win. When displaying consecutive lines,
besides being atrociously slow, the DD also refuses to display more
than 6 graphic lines per UUO. The trick is to output every 4th line
and then go back to fill in every line = 1 mod 4, etc.
259. New TTYSETs:
44 Get current padding character for DM. Returns -1 if not DM.
45 Set padding character for DM. No-op if not DM.
46 Get baud rate used in DM padding calculation. -1 if not DM.
47 Set baud rate used in DM padding calculation. No-op if not DM.
260. New AAO privilege (4.4 bit) says you have ownership rights to your
disk PPN when set in passive privileges (JB2PRV). When set in active
privileges, does something completely different (for a good time, read
the code). AAO goes away on an ALIAS monitor command or a DSKPPN UUO
which sets your disk PPN.
261. New SETPPV UUO, CALLI 400124, sets passive privileges (JB2PRV) from
its argument, requires AAO active.
262. TTYSET 14 -- diddle special DM bits -- has two new operation bits
(which appear in the right half of the function word):
Bit 29 0,,100 Flag this DM as a model 3025.
Bit 28 0,,200 Flag this DM as not a model 3025.
Currently, the significance of being flagged as a model 3025 is that
different padding is used, DM128 is assumed (can display control
characters), and when the cursor is supposed to be "off screen", it
is positioned at home instead (since the 3025 cannot make the cursor
disappear.
The DM3025 bit appears in the right half of the DM flag word,
which is returned by TTYSET 21. DM3025 is 0,,200 (bit 28) in DMFLAG.
263. The DDCHAN UUO, if bit 2 (100000,,0 bit) is set in the AC and if you
have the DEV privilege ACTIVE, takes bits 10-17 (377,,0) of AC as the
use code instead of using your job number. DEVPRV must be SETPRVed.
264. As of 8.73/A, the LOGIN UUO allows a phantom (ie, a job with JLOG off)
to set its PPN. It will not allow the phantom to set its privileges;
nor will it set JLOG (ie, the phantom remains a phantom). This allows
FTP programs to win without running with the REA and WRT privileges.
Previous systems make LOGIN illegal unless JLOG is clear and JACCT is
set.
265. The UUO Manual's sample calling sequence for the TMPCRD UUO uses
the TMPCOR UUO by mistake. Should say "TMPCRD AC,".
266. 8.73/A allows the "read info" MTAPE function for DSK, however, the
password is not returned unless the INF privileged is enabled. Previous
systems make this an illegal UUO unless INF is enabled.
267. Only a DISMIS UUO may be used to dismiss a KA-10 spacewar program.
All other UUO's are illegal on the KA-10.
268. A buffered mode IN or INPUT with nonzero eff. addr. (actually must be >3)
now checks the argument to make sure the buffer pointed to is empty, i.e.,
the word at the specified address must have its sign bit off. If not, the
UUO searches through the buffer ring and uses the first empty buffer it
finds. If all buffers are full, it uses the one pointed to by the UUO.
If it tries 100 (octal) buffers without finding either an empty one or
the end of the ring, it goes to UUOERR. This means the new buffers must
be set up before doing the UUO; the new sequence of events is
1. Do a WAIT
2. Move the buffers around in core
3. Do the IN UUO
269.
∂14-Nov-78 0521 TVR ADSMAP
CAVEAT: If you have more than one job connected to your Datadisk console and
you do a temperary audio switch selection via ADSMAP, a RESET on any
of your jobs will cancel the selection even if that job was not the
one which made the selection.
Perhaps this should be noted in the next UUO manual?
270. [THIS ENTRY IS NOW OBSOLETE! SEE 272 BELOW.]
New procedure for moving output buffers (cf. 268 above):
1. If you have a partially filled output buffer, output it by
OUT or OUTPUT UUO.
2. Give an OUT or OUTPUT whose effective addr points to any
of what will be the new output buffers. This UUO will
force out any waiting buffers, put the new buffer address
into the buffer ring header, and set the sign bit of the
first word of the header to indicate that the new ring
is not initialized.
3. Now set up the ring pointers in the new buffers.
4. Now do an OUT or OUTPUT (eff addr 0) which will simply
check the new buffer ring and make it ready for use, not
actually causing any output.
This procedure will work even if the old and new buffer areas
overlap. If, however, you have a partially filled buffer you
don't want to output until after you move the buffers, you have
to do steps 2, 3, and 4, then move the data from the old buffer
into the new buffer, being sure to keep the byte pointer in the
buffer header correct.
271. RUNMSK, GDPTIM, and LTHUUO are now completely flushed.
272. 270 is obsolete. New procedure for moving output buffers:
First move the buffers, then do the OUT UUO with nonzero E.
This will find the first empty buffer after a full buffer
and set DEVOAD to it. You set up the buffer header yourself,
as for input.
273. LIV privilege now means only that the job is never auto-logged-out
(it may be detached). It is a passive priv but explicitly disabled
whenever any program is run by monitor command. New passive priv
DET means that auto-detach is preferred to auto-logout; can be
set by anyone by command or UUO. (DETPRV = 0,,100000)
274. Location 341 points to the DDBCNT job table. This table has one
word per job number, which is AOSed on an INIT or OPEN for any
device other than TTY or DSK (or new-style UDP), and on an ENTER
on DSK (or...). It is SOSed on RELEASE of non-DSK, non-TTY, and
either on CLOSE or RELEASE of a disk channel open for writing.
It is zeroed on RESET. The table is meant to help smart autologout;
the spy will prefer to log out jobs for which this entry is zero.
275. The owner of a PTY gets (if enabled) the INTTTC interrupt (100000,,0
bit) if the PTY becomes a DM or a non-DM, or goes into or out of
image mode.
276. Section 13.4 on DM display output should mention that the character
33 sent to a DM128-type Datamedia causes the next character to be
displayed no matter what it is (even if it is a control character).
For DM3025-type DMs, however, the next char is displayed only if it
is a control character (0:37) or 177 (the remaining characters may
cause control functions when following a 33 on a DM3025).
277. The P2UUO UUO (CALLI 400125) is used to test and modify the state of
P2 in a FTP2SP system. The AC field of the UUO (not the contents of
the AC, but the field itself) determines the precise UUO function:
0 - TEST P2 MEMORY UP
1 - TEST P2 RUNNING
2 - SET P2 MEMORY UP
3 - SET P2 MEMORY DOWN
4 - GET P2 MEMORY AS HISEG WRITEABLE
5 - GET P2 MEMORY AS HISEG WRITE PROTECTED
Function 0 takes the skip return if P2's memory is working and
connected to the system. It takes the direct return if the memory
was nonexistent when the system was reloaded or has been declared
down at reload or while the system was running.
Function 1 takes the skip return if P2 is actually running its
system. (The P2 system might be hung, or even halted, but it
has set the flag saying it's up and has not been declared down
by either processor.)
Function 2, which requires the DEV privilege, declares that P2's
memory is now online if it had been down. Note that if the memory
is really still not connected, this will crash the system! This
function always takes the direct return. (It stops the job if
not privileged.)
Function 3, which also requires DEV, declares P2's memory down. It
stops the P2 system if it had been running. It takes the skip
return if successful--it requires three pages of other memory to
be available to hold the system data normally shared between the
two processors.
Note that functions 2 and 3 require the DEV privilege in the job's
ACTIVE privileges.
Functions 4 and 5 get all of P2 memory as your job's upper segment,
writeable or write protected respectively. They both take the skip
return if successful. They will fail if P2 memory is down; function
4 will also fail if you do not have the ACW privilege enabled.
278. The PHPEEK UUO (CALLI 400126) takes a fullword physical address in
the AC argument and returns in the same AC the contents of that
word of physical memory, or zero if there is no such word. Note
that, although the highest possible address is only 22 bits long,
bits 0:13 of the argument must be zero or the UUO will just return
a zero result. If P2 memory is up, it is in words 14 000 000 through
14 377 777 of P1 physical address space. P3 memory is not on P1's
memory bus, and cannot be read with this UUO. The PEEK UUO has been
modified so that it interprets its argument as an 18-bit exec
virtual address, ignoring the left half of the argument word.
279. The PTRDS UUO checks only the 7700,,0 bits of the possible byte
pointer to determine whether to keep the specified byte size and
position or to use 7-bit bytes starting in the high-order byte
of the addressed word. Thus, the user can specify any byte-size
such as 9-bit bytes in order to detect image mode output characters
that have the 400 bit on.
280. XGP error code 5 now means data missed in either buffered mode or
dump mode. This error comes along with the I/O status error bit
IODERR (0,,200000).
281. INTFOP bit (40000,,0) in interrupt enablings gets interrupts when
user on PTY flushes output (i.e., types ↑O if not on DM, or types
EDIT-CLEAR if on DM). The job controlling the PTY gets the
interrupt (not job running on PTY). The telnet servers will detect
this interrupt and tell the network to flush any outgoing text that
is in transit.
282. DM display program output (UPGIOT) that does inserts and deletes
to move text around on the screen should be done with the USERGO
bit set to prevent interruption while other pieces of the screen
(e.g., the page printer and line editor) are temporarily in the
wrong place.
283. TTYJOB UUO should say zero is returned if there is no such job.
289. (obsolete)
290. PTJOBX function 11 is PDETACH, which is just like DETACH (10)
except that if successful in the detach, it also makes the
detached job a phantom (i.e., turns of JLOG).
291. TTYSET function 50 gets the NO-DELETE bit and TTYSET function 51
sets this bit from the low-order bit of the function word. The
NO-DELETE bit is also set by the command TTY NO DELETE and cleared
by TTY DELETE.
292. Meaning of FULTWX:
FULTWX on means that the line is "self-echoing full duplex", i.e.,
system echoing is not necessary. TTY ECHO clears FULTWX, and
TTY NO ECHO sets it. (The manual has these two commands interchanged.)
293. LASTDISASTERTIME (low core pointer at 256) contains DATE,,TIME IN SECS
(not uptime as previously claimed).
294. In the SWAP UUO, if the core size specified in the GETADR section is
zero, the new program is given the amount of core that it was saved
in.
295. The DPYPOS and LEYPOS UUOs now use (essentially) all 18 bits of
position for DMs, in order to allow positioning even beyond line 36
on a (possibly simulated) DM. The interpretation of the position is
the same as before (1000 octal is the top of the screen and -1000 is
the 24th line; lines beyond the 24th are addressed by decrements of
2000/24 per line). Also, the maximum permissible DM screen height
allowed by the system is now 62 (decimal) lines. (For IIIs and DDs,
there is no effective change, since the whole III and DD screen
could already be addressed.) In actuality, the 400000 bit in the
LEYPOS address field is ignored except that this bit can be set
non-zero to ensure a non-zero value in the address field (a zero
value undoes any previous LEYPOS in effect).
296. Lowcore 257 contains the address of TIMDAT (date,,time in secs).
297. IMP MTAPE 24 will attempt to unwedge a connection in allocation wait.
This function requires UPG and is intended for network wizards only,
as it randomly mauls a connection's allocation (essentially, it fakes
receiving a 4 message, 100 bit allocation from the remote host). It
takes a connection index (which changes in real time!) for a single
argument and skip returns if it succeeds.
298. The manual's example section (Section 14) should be referenced by the
sections being exampled.
299. TTYSET function 52 sets the DM width of your terminal to that given
in the right half of the function word. This function will be a no-op
if either your terminal is not already known by the system to be a DM
or if the given width is not between 16 and 96 inclusive (current
limits). For now, the width MUST be a multiple of 8; if it is not,
then it is truncated to the next lower multiple of 8.
300. The referenced-date word in UFDs, long-block LOOKUPs, and disk
retrieval will soon include more info (including a count of days
referenced) of yet-undefined format. Programs that use the date
should AND the word with 0,,77777 before printing to get only the
date referenced. -- ME
301. The ICTRAN bit in the IMP I/O status word means that an incomplete
transmission occured, as of system 9.06/C. ICTRAN is the 4000 bit.
302. The IOIMPM bit in the IMP I/O status word means that an IN or OUT
UUO was attempted when there was no connection open on that channel.
303. The BLOK bit (100 in IMP I/O status word) indicates that the connection
is in a RFNM wait.
304. The IO%RDY bit (2000 in DLN I/O status word) indicates the Dialnet port
received a good packet from the other side.
305. The cell UPTIME (pointed to by some lowcore location) counts only ticks
the system sees, not those it misses, for example while in DDT. It does
not count real time, only system-active time.
306. MTAPE 16 for the disk is permanent really only if file open for writing,
normally or in RA mode.
307. As of system 9.06/G, the IOIMPM bit will be set in the DLN I/O status
work if Dialnet I/O is attempted without an open connection. Previously
it stopped the job with an error.
308. For disk files, the left half of the word containing the date
referenced now contains a count of the number of days on which the
file has been referenced (since the date last written). The count
is zero for any file that has been referenced only on the date
written, and the count is incremented once for each day thereafter
on which the file is referenced.
309. Bit 5 (10000,,0) of the dump date word (sixth word returned on
long lookup)is the REAP bit, indicating that DART should P-dump
twice and then delete the file.
310. Device VRN is the Varian Plotter, driven from P2. It can be
opened only in modes 17 and 117. The format of data for device
VRN is exactly like that for device XGP in mode 17 (and 117),
but the "cut the paper" bit is currently ignored for the VRN
(in the future it might mean "draw a line of some length on the
paper so the paper can be cut here later"). The VRN and XGP
are interlocked such that they cannot both be INITed
concurrently. An attempt to INIT one while the other is busy
will fail or wait (depending on the INIT bits and/or your
answer to a question about waiting). It IS possible for both
of these devices to be concurrently ASSIGNed.
311. An IOWD for the VRN or XGP in mode 117 that becomes illegal
because the user changed the IOWD or the user core size while
the XGP was running in overlapped mode will cause the IOIMPM
error bit to come on in the I/O status word with major error
code 16. The MTAPE that reads the error code will return the
out-of-bounds user address in ADR+2.
312. Any error reported by the VRN while data is being transmitted
to it will generate error code 6, with the error reading MTAPE
returning in ADR+2 the CONI bits of the VRN at the time of the
error. The possible right-half error bits are listed below (some
other, non-error, bits will probably also be on).
VNOTOK←←40000 ;Device not ready (e.g., off-line or power off)
VOFFLN←←400 ;Off-line
VSUPLO←←200 ;Supplies low
313. The MTAPE UUO for the VRN takes exactly the same format as the
MTAPE for the XGP. However, only MTAPEs 0, 4 and 5 are legal for
the VRN (since text mode is not implemented for the VRN); each of
these three MTAPEs does the same for the VRN as it does for the
XGP. (MTAPE 4 returns ADR+3 as zero iff any of the above 3 error
bits were on in the last VRN CONI).
314. The DWCNT field for the GCW of XGP and VRN dump mode output is
now one bit bigger than before (now 7 bits wide, consisting of
the 0,,177 bits of the GCW).
315. The FILUSR UUO [CALLI 400046] can be used to find out what job(s)
have a particular file open. The call is
MOVEI AC,ARGS
FILUSR AC,
<ERROR RETURN - NOT A DISK DEVICE>
<NORMAL RETURN>
ARGS: SIXBIT /DEV/ ;MUST BE DISK OR NEW-STYLE UDP, 0 MEANS DSK
SIXBIT /NAME/
SIXBIT /EXT/
BLK
SIXBIT /PPN/
BLK: BLOCK =16
On return from the UUO, BLK contains a list of 9-bit bytes,
terminated with a zero byte. Each byte contains a job number
in the rightmost six bits, and a flag in the 400 bit which
will be on if that job has the file open for output (including
read/alter mode). (The job may also have the file open for
input on another channel. Each job number will only appear
once no matter how many channels have the same file open.)
The 200 and 100 bits in each 9-bit job-number byte are reserved
for future use.
[FILUSR now returns a list of 18-bit job numbers. See item 342 below.]
316. Clarification: The UPGIOT UUO for a DM or a III copies the text out
of your core image into system free storage and outputs it from
there. So you can use overlapped mode and then clobber the core
where the program was as soon as the UUO returns (for DMs and IIIs,
but not for DDs which do the display output directly from your core
image).
317. The following interrupt bit was added some time ago.
Bit Octal Name Interrupt Condition
21 0,,40000 INTSIX The PDP-6 has interrupted with a message (or
something).
318. Typeout by the TTYMES and NULMES UUOs to any terminal other than
'TTY' will not be suppressed by typing ESC O (↑O on non-displays).
Thus you can suppress your own program's output without suppressing
messages sent to you by other people.
319. The following TTYSET functions are added:
53 ;GET NOEDIT ESCAPE CHARS
54 ;SET NOEDIT ESCAPE CHAR (SIC)
55 ;GET NOEDIT FLAG
56 ;SET NOEDIT FLAG
57 ;GET HTOGGL FLAG
60 ;SET HTOGGL FLAG
61 ;GET NOEDIT MODE
62 ;SET NOEDIT MODE
55-60 have arguments and values of a single bit. 53 returns a word
with one bit per possible ESCAPE character; the bit is 1 if that
character is in fact an ESCAPE. The bits are:
char octal bit octal
↑@ 000 35 1
↑H 010 34 2
↑I 011 33 4
↑J 012 32 10
↑K 013 31 20
↑L 014 30 40
↑[ 033 29 100
↑\ 034 28 200
↑] 035 27 400
↑↑ 036 26 1000
↑← 037 25 2000
54 takes a character code (ASCII) as its argument.
61 and 62 get and set a 4-bit field. The TTY must be in a NOEDIT mode
for these to be meaningful. The four bits are
bit octal meaning
32 10 ALL-QUOTE mode (including BUCKY-ALLQUOTE)
33 4 any QUOTE mode (anything but NORMAL)
34 2 META- or CONTROL-META-QUOTE or -ALL-QUOTE
35 1 CONTROL- or CONTROL-META-QUOTE or -ALL-QUOTE
All four bits are zero for NORMAL mode.
320. The sign bit of the XGP right margin word (in MTAPEs 2 and 3,
read and set margins) means "suppress wraparound when text passes
the right margin." With this bit on (the default is off, i.e.,
text wraps around), any character starting beyond the right
margin is ignored. A carriage return, or other explicit column-
setting command, will cause printing to resume.
321. The line editor command META-<bs> no longer clear line editor
insert mode. This allows NO-EDIT-KEY display users to type
RUBOUT (which turns into META-<bs>) while in insert mode, just
like DD users type BS, without clearing the insert mode. This is
the only META command which doesn't clear insert mode.
322. For the XGP, there is a new No-Wraparound mode for text output after
the right margin has been reached. In this new mode, all text beyond
the right margin is ignored, until an explicit absolute column is
selected, for instance with a CR. In Wraparound mode (the default and
formerly the only mode available), a CRLF is inserted and the text
continues on the next line whenever the right margin is exceeded.
No-Wraparound mode is enabled by setting the sign bit of the
right-margin word of the XGP margin setting MTAPE (function 3, sign
bit of word 5). The XGP margin reading MTAPE (function 2) returns the
sign bit of the right-margin word (word 5) as the No-Wraparound mode
flag.
323. The MTAPE 5 for XGP and VRN, called "pseudo-close", is useful
particularly in overlapped video mode (mode 117). In that mode, when
you have no more data to output, you should do an MTAPE [5] instead of
a CLOSE (or at least before any CLOSE) to tell the system that no more
data is to occur. If you do a normal CLOSE UUO instead, then you will
very likely get the I/O status bit IOTEND, meaning "data ran out
before close done" (which can happen otherwise if you don't always
have the data ready for the device when it needs it). A normal CLOSE
UUO waits for output to finish before it does ANYTHING, but that means
that the XGP or VRN service routine will run out of data before
finding out that you have done a CLOSE, so it will turn on the IOTEND
bit. And that will make it impossible to tell whether you got the
IOTEND error actually in the middle of the data, which is where it can
affect the output. When IOTEND comes on, the XGP will cut the paper
and the VRN will slew out the paper.
324. In the "extended display service", the terminal dependent flags
formerly kept in the right half of the DMFLAG word of the dpy hdr
(returned by TTYSET 21) are now kept elsewhere. See the description
below of TTYSET function 63, which returns the new bits and more.
325. The baud rate used for padding, set by TTY PADBAUD and some TTYSET,
is remembered only to the next lowest 50 baud. (0-49 map to 0, etc.)
This precision is not guaranteed to be constant.
326. Three new TTYSETs: (NOTE: The first two are still subject to change)
63 Returns information about the current display type of the
given terminal in the block pointed to by the right half
of the function word:
ADDR+0/sixbit display type name
ADDR+1/display height
ADDR+2/display width
ADDR+3/padding char
ADDR+4/padding baud rate
ADDR+5/tab flag in low-order bit (bit on if dpy has tabs)
ADDR+6/EDITKY LH bits mask,,EDITKY LH bits
ADDR+7/DPYDES LH bits mask,,DPYDES LH bits
ADDR+10 thru ADDR+13/ reserved for future use
The sign bits of words 4 & 5 may be on, in order to make a
set-dpy-type TTYSET function (64, see below) work when
given back the block returned by this function. For the
same reason, the left halves of words 6 and 7 will be
returned with ones in (at least) the positions for bits
(in the right half) that can be specified by the user.
See function 64 below.
64 Sets the display type of the given terminal from the
information supplied in the block pointed to by the right
half of the function word. The information specified by
this function is the same as that returned by function 63
above. Word 0 of the parameter block should contain the
official SIXBIT name of some display type that is
supported by the system; otherwise, this function will be
a no-op (see the display types listed in
DISPLA.ME[UP,DOC]). However, parameter words can contain
zero to indicate that the default values for the
corresponding parameters should be used (the defaults
depend on the display type). To force word 4 or 5 to be
non-zero, you can turn on the sign bit (needed if the
parameter value specified in the right half is actually
zero -- note that the padding character is not allowed
to be zero). Only the right half of each word is actually
used to set the given value; unused bits in the left
halves of parameter words should be left zero.
65 Makes the given terminal NOT a display (like TTY NO DM).
327. Include the rest of the character codes for the Analex LPT
(cf Analex Instruction Manual pp1-4:1-5)
328. Two new TTYSET UUO functions:
TTYSET function 66 - Re-initialize the display (TTY INITIALIZE).
The given terminal, which must be a DM-type display,
is re-initialized, as by the TTY INITIALIZE command.
This is useful for resetting settable tabs that may
have gotten clobbered somehow, or for restoring the
terminal to the correct operating state after being
powered off, etc. Function 67 (below) will make the
system simply reset your tab stops, but without redrawing
any text; function 66 will simulate a BREAK P to redraw
the page printer.
TTYSET function 67 - Set tabs, if any, on display terminal.
Simply re-sets the tabs for the given terminal, provided
the terminal is a display with tabs. Note, however, that
this function doesn't clear the previous tab stops, so if
there were some that weren't in multiple-of-8 columns,
then those bad tab stops will remain, and will probably
screw up output. To clear bad tab stops while re-setting
the right ones, use function 66.
329. The left half of low-core 343 contains a pointer to the PSB, if
P1 is a KA (or equivalent, such as F2). The right half still
points to the EXPGT. Both of these are virtual addresses.
330. The TTREAD UUO now returns (immediately) the last known state of
the microswitch keyboard keys, and at the same time requests the
state from the keyboard. Thus the first TTREAD UUO for a given
keyboard may return randomness, but subsequent ones should return
very recent information.
331. The following warning NO LONGER APPLIES to ANY version of WAITS:
A spacewar UUO that attempts to reference any accumulators will never
access the correct set of ACs (whether the AC is referenced
as an AC or as a memory location); and a UUO that returns
results in the ACs may in fact return the results in the ACs
of the job's main process (if the main process is waiting in
the middle of a UUO), thus clobbering whatever the main process
had in its AC(s)!
Spacewar UUOs now reference the ACs correctly on both the KL and the
F2 versions of WAITS.
332. The UGETF UUO for the disk returns the new record number in the
right half only of the cell pointed to by the UUO; the left
half of the destination word is untouched. And on dectapes in
UDSD mode, the returned word has the next block to write in the
LH and the next block to read in the RH). (The Dectape writeup
of UDSD mode has the halves of UGETF's result reversed.)
333. TTYSET 70 returns the LINBIT word for the given TTY. This word has
the default line characteristics (in the LH) for that TTY and the
DCA port number (if any) plus the 400000 bit in the right half if it
is a DCA TTY. If the DMLIN bit is on in the LH of the returned
word, then the TTY is know as a "permanent DM-type display".
334. User interrupt code for an old style interrupt is no longer ever
started with the BIS (byte-increment suppress) flag on. Formerly
a bug caused this bit to be on for the interrupt routine if this
bit was on in the trap PC. This doesn't affect new-style
interrupts, which get their entire set of PC flags from the left
half of JOBAPR (with user mode forced on, of course).
335. TTYSET 71 finds out if the given TTY is enabled (as with TTY EXIST)
or disabled (as with TTY NO EXIST). If the given TTY is on the DCA
TTY scanner and is enabled, then this function returns a value of 1.
If the TTY is not on the DCA, or if it is on the DCA and is not
enabled, then this function returns a value of 0.
TTYSET 72 enables or disables the given TTY (provided it is on
the DCA scanner). If the low-order bit of the function word is
on, then the TTY is enabled, else it is disabled. This is the
equivalent of the TTY [NO] EXIST monitor command for the given TTY.
336. Low-core location 346 contains:
left half: optimum number of disk buffers for buffered-mode I/O;
right half: number of data words per track for the disk.
These numbers will be different at CCRMA and SU-AI since the disks
are different in size.
337. The following TTYSET functions can now be done even if the
target TTY is not in use. (As of 6 May 80.)
;40 ;Set speed
;41 ;Hang up the line
;70 ;Get LINBIT entry for this TTY
;71 ;Get bit indicating TTY's existence
;72 ;Set bit indicating TTY's existence
Also, the Set-Speed TTYSET (40) is now allowed for any local TTY as
well as for auto-baud-detect lines. Here are the possible speeds and
their representative values for the right half of the function word.
(See item 243 in this file.)
Speed Index
110 baud 0
134.5 1
150 2
300 3
600 4
1200 5
1800 6
2400 7
4800 10
9600 11
1200/150 12
55 13
75 14
EXT speed 15
1800/1200 16
Note that not all TTY ports on the DCA scanner can run at all of
of the above speeds. See a wizard for the possible speeds on a
given TTY.
338. The NSL privilege is "Negative Service Level", bit 4,,0 in the
passive privilege word. With this "privilege", a job won't ever
be run if any non-NSL jobs are trying to run. This bit is NOT
copied to a new job's privileges upon FORK command but currently
is copied to new job's privs upon SWAP UUO. See NOTICE[UP,DOC]/273P.
339. TV camera error pointer:
As of some time ago (about 1978?), when an error occurs during an
INPUT from device TV, the number returned in the left half of the
fourth word of the block pointed to by the INPUT UUO is actually
the offset from the beginning of the data block of the data word
where the transfer was terminated. The UUO Manual claims the
left half returns a user address, but that is not true; the
left half returns the offset of the stopping point.
340. (CCRMA WAITS only) The following bits are in the left half of the
first word of the block pointed to by a UPGIOT or DDUPG UUO; the
program will be made to output to the F2's Grinnell displays.
2,,0 Interpret this as a III program
4,,0 Interpret this as a Grinnell program
If both of these bits are off, then the program is interpreted
as a DD program (DD interface commands).
341. The SETPRO UUO can be used to set the protection of the lower
segment of the issuing job, but only by explicitly specifying the
number of that job in the AC used in the UUO. You cannot set the
protection of any other lower segment. The purpose of this feature
is to allow modifying the lower's protection without affecting its
creation date (see the SETCRD UUO), before creating an upper segment
which will automatically copy the protection and creation date of
the lower segment.
342. The FILUSR UUO now returns 18-bit job number bytes in the =16-word
block, with a maximum of =31 job numbers, plus a zero byte at the
end. If more than =31 jobs have the given file open, only =31 of
them are reported (and a more or less randomly selected =31 jobs at
that). The Write flag returned in a job-number byte if the job is
writing the given file is now the 400000 bit of the byte. The
370000 bits in the byte are reserved for flags and the 7777 bits in
the byte hold the job number.
343. The POINTS UUO now returns a maximum of =63 job numbers even if
more than =63 jobs are sharing your upper segment.
344. The job number byte in device DDBs has been moved. The new byte
can be found by using the byte pointer in the new lowcore cell 347,
and indexing with the address of the beginning of the DDB. The
unit number byte will move very soon, but it can already be found
by using the byte pointer in the new lowcore cell 350, and indexing
with the address of the DDB.
345. The DDCHAN UUO has changed the format of the returned channel usage
code to allow for bigger job numbers. The new format is similar to
the old, but the 100 and 200 bits are now 10000 and 20000, AND:
the TTY number returned with the 10000 bit is now relative to zero
instead of to the first DD line number. The 7777 bits hold the job
number if bits 2:5 are zero, or hold the TTY number if bits 2:5 are
1, or hold the special use code if bits 2:5 are 2 (special code 0
is available channel, special code 1 means detached from system).
The DDTAB table in the system has been similarly changed.
346. The max job number has been changed from 63 to 79.
347. Two new CALLIs:
MOVE AC,[privilege bits]
PRVIOR AC, CALLI AC,400132
MOVE AC,[privilege bits]
PRVACM AC, CALLI AC,400133
The first turns on privileges selected by bits on in the AC, and
the second turns off the selected privileges. The turning on and
off is done in the job's active privileges, except for those
privileges which are normally tested from the passive privilege
word, currently LUP, NSL, LIV, and DET.
Both UUOs return in the AC the job's current privilege status,
meaning the active privileges except that the four mentioned
above are taken from the passive privileges. This combined
privilege word is the right thing to give the SETPRV UUO to
restore the current state of privileges. Note that the value
returned by SETPRV itself is NOT the right thing, because in
that returned value all but LUP are taken from the active
privileges.
The sequence
MOVE AC,[2,,jobnumber]
GETPRV AC,
will return the correct combined privileges without setting or
clearing anything. PRVIOR, of course, checks the legality of
the privileges you want to set; PRVACM lets you clear anything.
348. There are now terminal-input macros available on all terminals.
Such macros make it possible to type a short string of characters
(possibly one character) to get the effect of typing many
characters.
There are two types of macros available: the ESC # CR macro and the
NOEDIT-display macro. The CHRMAC and GETMAC UUOs have been made to
work for defining and returning definitions for ESC # CR macros as
well as for NOEDIT macros.
See MACROS.ME[UP,DOC] for a complete description of terminal-input
macros and how to define and call them.
349. The sequence
MOVEI AC,'SSW'
SPCWGO AC,
stops your spacewar process just like SPCWAR 'SSW' does. In both
cases, the "startup interval" must be zero. Of course SPCWAR 'SSW'
only takes one instruction to stop spacewar instead of two for the
other form.
350. (This entry should have been included around entry 346 above, but
was accidentally omitted.) The DEVUSE UUO returns the job number of
the device's owner in bits 8:17 (1777,,0) instead of just 12:17,
since job numbers can now be more than 6 bits wide.
351. 17 Dec 80 ME: The default TTY width has been changed to =80 (from =84).
352. 23 Dec 80 ME: The DEVUSE UUO will return the 400000,,0 bit on and a
zero job number field if (but not only if) the device is sharable
but detached from the system. Also, the ASSCON bit in the model DDB
for a sharable device will be on if that device is detached from the
system.
353. 8 Jan 81 ME: The unit number field in the DDB has been moved to make
room for a bigger field (to allow for more TTY numbers). Programs
that want to use this field should access it with the byte pointer
provided for this purpose in lowcore exec location 350; use that
byte pointer and index with the address of the DDB. Also, the
maximum number of TTYs has been increased; the maximum (currently
220) can be obtained by adding up the four 9-bit bytes in lowcore
location 221 (see the UUO Manual).
354. 16 Jan 81 ME: Note that there is only one record pointer maintained
by the system for disk files, so that USETI and USETO actually set
the same pointer (although they may do different things to process
or flush any previously set up buffers).
355. 25 Jan 81 BH: The TTYIOS UUO, if its argument is the negative of a
legal channel number (i.e. between 0 and -17), returns the IOS for
that channel's DDB in your own job. This differs from the GETSTS
UUO in that the latter (contrary to what the manual says) returns
only the right half of IOS.
356. 1/26/81 MRC: Include PUPPY.DOC[SS,SYS].
357. 2/16/81 ME: The ELFQIK bit (0,,400) in ELF IO status means do ELF
output without waiting for the ELF (no CONSO in the output loop).
This is dangerous since it doesn't check for the ELF being ready,
but it can speed up output because the CONSO takes a while.
4/7/81 ME: The ELFQIK bit (0,,400) in ELF IO status also makes
input occur without waiting for the ELF (no CONSO in the input loop).
This is dangerous since it doesn't check for the ELF being ready,
but it can speed up output because the CONSO takes a while.
358. 2/22/81 ME: In the PPACT UUO, if the low-order bit of the effective
address is on, then the UUO will not erase any PPs being deactivated
by the UUO. Normally, PPs being deactivated are explicitly erased
on DDs and DMs. This erasure suppression is intended for display
programs that are going to do their own erasing of the screen and
which therefore do not want extraneous erasing done by the system
that might come after the program is displaying some text. This
non-erasure does not apply to IIIs, which can't have this timing
problem anyway.
359. 2/22/81 ME: For the PPREL UUO, the manual suggests that on DDs and
DMs, Pieces of Paper being released do not get erased. This is not
true; they do get erased (explicitly by the system). However, only
those lines of the PP that have actually held page printer text will
be erased and because of a bug in the system the last of these is
NOT erased.
Beginning now, however, PPREL will not erase a PP that is not
currently activated. So you can prevent the erasing of a PP to be
released by deactivating it first (with PPACT, using the feature
described in 358 above, e.g., by doing a PPACT 1 before the PPREL).
Note that PPREL is done by DPYCLR, which is done by RESET, which is
done by EXIT.
As a result of this change and that in 358 above, the following
sequence can be used by a display-oriented program that is exiting
and that wants to normalize the screen without first explicitly
erasing whatever display it has previously put up. This sequence
erases the whole screen, normalizes the page printer, redraws the
text of the normal page printer (PP 0), and exits:
PPACT 1 ;Deactivate all PPs, without erasing any.
HRROI AC,[4000,,400+"N"] ;TTYSET code to do a BRK N to erase the screen
TTYSET AC, ; and start redrawing normal PP.
EXIT ;Exit and reset everying, PPRELing all but PP 0.
Of course, a better program will erase exactly what it had put up on
the screen, so that it won't have to do the BRK N (which often
erases more than necessary, thus requiring more to be redrawn next).
360. It should be noted (in Section 9) that INTTTY interrupts
can also come from any TTY you have INITed (or ASSIGNed).
361. The INTQUIT interrupt (0,,2000 bit) is generated for the job owning a
PTY on which the QUIT monitor command is given. This interrupt is
intended to tell the owning job (server) to close the network
connection for the PTY on which the command is given.
362. Three new UUOs allow the user program to specify which interrupts
should cause its interrupt level process to be run (as usual, at the
address given in JOBAPR). The interrupt level process need not be
run if all it would do for the particular interrupt is a DISMIS.
Avoiding running this process will save some otherwise wasted
rescheduling that is done to start and stop the process. There is an
Interrupt-Run Mask that specifies the bits for those interrupts that
should cause the I-level process to be run. The three new UUOs are:
IRUMSK [mask] ;sets the mask to that given
IRUMST [new bits] ;turns ON the given new bits in the mask
IRUMCL [old bits] ;turns OFF the given old bits in the mask
The old UUO INTDMP now returns the current mask in word three of the
block of data returned (formerly, a zero was returned there).
This new mask defaults to -1 (all interrupts cause interrrupt-level
process to be run). RESET also resets this mask to -1.
Thus if your entire interrupt-level process consists of just a
DISMIS UUO, then you should use IRUMSK [0] to prevent the
interrupt-level process from being run for any interrupts. This
will not keep the interrupts from waking up your program's main
process; if it is in INTW queue waiting for an interrupt, it will
still be awakened according to the wakeup mask set by the IWKMSK
UUO.
363. The INTTTC interrupt (100000,,0 bit) is generated for the job
attached to or owning (via INIT or OPEN, or as the creator/owner of
a PTY) a terminal whose display type changes (as from TTY DM or TTY
NO DM). Change of non-display type does not generate this interrupt
(e.g., TTY GLASS doesn't do it). (This has been true for a long
time, but wasn't completely documented.)
364. In the PPINFO and PPSPY UUOs, bit 4 of word 23 is on iff the
display's line editor has wrapped around (used two display lines)
since the last time that display's job gave a PPINFO UUO.
365. Bit 7 (2000,,0) in the DIAL UUO function 2 (dial a number) now
means "dial out with 103 or 212 type modem". If this bit is off,
Vadic 3400 type modem is dialed out on. (This bit formerly was
reserved for switching phone to AD/DA.) Also, since the Vadic
dialer has replaced the old dialer, the DIAL UUO no longer returns
any CONI bits, but instead returns a code indicating the outcome
of the dialing. See a wizard or the DIAL program for the codes.
366. TTYSET UUO operations 53 (get ESC chars) and 54 (set ESC chars)
now apply to EDIT-key as well as NOEDIT displays. However, since
an EDIT-key display can have at most one non-NUL ESCAPE character,
the set ESC operation undoes any previous definition of an ESC
character, and the get ESC operation returns exactly one bit on.
367. The size of the system's TTY input buffer for each TTY has been
changed from 30 (octal) words to 60. Programs that think they
know what this size is may find out that they don't any more.
368. ∂10-Nov-82 1256 DRF uuo manual complaint
The SEGNUM UUO bombs your job out if the AC has an illegal job
number. The manual ought to mention this, at least.
369. The RESET UUO does not kill all your detached upper segments
like it claims to. Instead, those segments are killed when
you get another core image (e.g., via GET command or SWAP UUO)
or when you do a CORE 0 command.
370. The DIAL UUO has a new error code, 10 (octal), which means
that the dialer timed out. Usually this means the dialer
itself or its terminal line to the system (the DCA port) isn't
working. When this happens, a wizard should probably be
notified. Error codes 5, 6 and 7 were new recently; 5 (no
system DDB for dialer) and 6 (dialer's TTY output buffer
overflowed) shouldn't happen, but indicate a system error if
they do. Error code 7 means that the number to be dialed
contained a dialing digit greater than 9 (user error).
371. The IMP is now run using the IP/TCP protocols. The major differences
between this and NCP are as follows: Connections are now two-way (no
separate send and receive connections). Sixteen-bit port numbers replace
32-bit sockets, with odd or even always legal. There is no more initial
connection protocol; you just start talking to the Telnet port (for
example) of the foreign host. The transfer byte size of a connection is
always 8 bits. The kludge involving marking of padding bytes is gone;
buffer headers now always contain the correct byte count.
Bits 1-4 of the IMP status word, returned by MTAPEs, retain their
approximate former meanings, but these are derived from the state of the
TCP connection, which gives more accurate information. Other bits in the
left half are no longer set, and the list of error codes includes the
following new errors:
10 State error
11 Can't get there from here
12 Not enough internal buffer space
13 Illegal host number
14 Destination net unreachable
15 Destination host unreachable
16 Destination protocol unreachable
17 Destination port unreachable
20 Fragmentation needed and DF set
21 Source route failed
22 Destination unreachable: unknown code
Some of the old error codes can no longer happen.
Bits in the I/O status word mean the following:
Bit Octal Name Meaning
19 0,,200000 IODERR Set along with other bits for most errors
20 0,,100000 IODTER (no longer used)
22 0,,20000 IODEND End of file
25 0,,2000 HDEAD Foreign host dead
26 0,,1000 IODATA There is data ready for input
27 0,,400 RSET TCP reset received
28 0,,200 TMO Timeout
INTINR and INTINS interrupts are no longer possible.
Changes to IMP MTAPEs are as follows:
0 (CONNECT): Address must be in IP format (32 bit IP address,
right-adjusted in word).
1 (LISTEN): You may specify -1 in ADR+2 to gensym a local port.
Non-zero values in ADR+5 and/or ADR+6 indicate that you want to
listen for a specific host or foreign port number. Otherwise any
host and port will be allowed, and returned in those words if a
connection was made.
2 (GET STATUS): Returns the same values in both words.
3 (TERMINATE): Send & receive socket distinction not made. Local port
number may be 0; otherwise must be port for this channel.
4 (WAIT): Local port may be 0; otherwise checked as in MTAPE 3.
5 (DUMP): Not yet implemented. Causes a UUO error.
7 (GET LISTEN INFO): Local port word always filled in with current
port number.
11 (SEND INTERRUPT): Currently a no-op. Just returns status bits.
14 (TEST & CLEAR INTERRUPTS): Always sets both words to 0.
15 (ALLOCATE): Currently a no-op.
16 (GET ALLOCATIONS): Bit allocations are always a multiple of 8.
Message allocations are always returned as 0.
17 (SET TIMEOUTS): RFNM timeout no longer has any effect.
22 (ABORT): Aborts a TCP connection. Returns status in ADR+1.
Formerly sent an NCP host reset, requiring UPG privilege.
24 (UNWEDGE): Now illegal.
MTAPEs not in the above list retain their former functions.
372. New IMP MTAPE 25 sets TCP push handling on output. ADR+1 is 0 to set the
push bit whenever finished outputting a buffer; 1 to set the push bit on
the next buffer but not on future buffers until closing the connection; 2
to push only on connection close. If this MTAPE is not given, every
buffer is pushed.
373. WAITS now sends and receives IP packets on the Ethernet, as well as the
ARPAnet. Host numbers are network-dependent (SU-AI's IP host number for
the ARPAnet is 10.0.0.11; for the Ethernet it is 36.40.0.194, though at
some point in the future it will change to 128.12.40.194), but MTAPE 1
(LISTEN) will succeed on incoming connections to either host number. In
some cases programs need to be aware of which host number their connection
is associated with; for example, an FTP program issuing the PORT command.
374. IMP MTAPEs 1 (Listen) and 7 (get connect block info) return the same
data, and this data now includes local IP host number in use on the
connection in the wait-flag word (word 3) of the block. If no
connection is open, the local IP host number returned may be zero.
375. The .SYML UUO will succeed even if the given symbol is multiply
defined, provided all such definitions for it have the same value.
376. Along with IMP, the device PUP no longer uses the low order bits of buffer
words to indicate padding bytes in 8-bit byte buffers. The byte pointer
is used to check for padding on output, and the correct byte count is
returned on input.
377. Low core locations:
352/WHOIMP,,WHOPUP ;ptrs to info blocks for devices IMP and PUP
354/-NNETS,,NETLST ;aobjn ptr to networks the local host is on
355/-NHOSTS,,HSTLST ;aobjn ptr to host numbers for the local host
378. Low core location:
263/WATCPU,,WATSIT
WATCPU indicates what CPU type this particular WAITS system has, namely:
0 for KA-10 or F2, and
1 for KL-10.
WATSIT indicates which WAITS site this is, namely:
0 for SU-AI,
1 for CCRMA, and
2 for S1-A.
Thus, at SU-AI, 263 contains 1,,0. This word can be used to by programs
that need to distinguish the different WAITS systems and CPUs.
379. In the UPGIOT UUO, a new escape sequence exists for including text
characters below 40 octal in a display program with DMQUOT on. In DMQUOT
mode, normally all bytes below 40 are taken as display control commands
(such as clear screen, clear to end of line, etc.). The normal quoting
mechanism of preceding a byte with a 177 also forces that byte to be
interpreted as a display control character, so this quoting is not useful
in DMQUOT mode. Therefore the escape sequence 177 41 X, where X is any
character, will cause X to be taken as normal text to be displayed. Since
display control characters normally have to quoted (individually with 177
or in general with DMQUOT), the sequence 177 41 X is said to "unquote" the
character X. This will work even if DMQUOT is off, but in that case a
simple X would do the same thing. "Unquoting" a character X is useful in
DMQUOT mode, with X being 175 or 176 or below 40; for X=175 or 176, DMQUOT
mode suppresses the conversion of X from the WAITS character set to ASCII,
but 177 41 X will allow this conversion, as X is taken as normal text in
this case. ** If the X in 177 41 X is 0, 11, 12, or 15, note that it will
not be displayed as a text character, but rather have its normal text-mode
interpretation, namely, 0 will be ignored, 11 will be a tab, 12 will be a
linefeed, and 15 a carriage return.
380. Several changes have been made to IP/TCP service; item 371 above now
contains the new information. MTAPE error codes and I/O status bits are
the major thing that has changed.
381. New CALLI:
MOVE AC,[<device name in sixbit, or channel number>]
BLKLEN AC, CALLI AC,400134
Returns <optimum buffer count>,,<block length in words> in AC. Returns 0
if no such device, or device not a disk. For the main filesystem
structure, this is the same information that is stored in lowcore 346.
382. For the DEVUSE UUO, add device PUP to the list of devices for which this
UUO always returns zero in bits 0 and 1. Similarly for the DEVCHR UUO and
bits 18 and 19. Device SIX no longer exists.
383. IMP MTAPE 22, which formerly sent an NCP host reset (requiring the UPG
privilege enabled), now aborts the connection on its channel by sending a
TCP reset, and no longer requires UPG. Status bits are returned in ADR+1.
Item 371 above has been changed.
384. Echoing of system-inserted linefeeds on FULTWX terminals does not apply to
IMPBIT terminals, since it is assumed that the foreign host is including
them in its local echoing.
385. IMP MTAPE 5, which under NCP returned pointers to system tables, now shows
various status information about the connection on the channel that it is
given for. The format is as follows:
MTAPE <chan>,ADR
ADR: 5
ADR+1: number of words desired
ADR+2: I/O status (same value as returned by GETSTS UUO)
ADR+3: status bits (the value returned in ADR+1 by many MTAPEs)
ADR+4: connection state
ADR+5: local host
ADR+6: local port
ADR+7: foreign host
ADR+10: foreign port
ADR+11: network host (gateway, if different from foreign host)
ADR+12: IP protocol
ADR+13: input window (TCP)
ADR+14: output window (TCP)
ADR+15: current retranmission timeout time (TCP)
ADR+16: next sequence number to be received (TCP)
ADR+17: next sequence number to be sent (TCP)
ADR+20: next sent sequence number to be acknowledged (TCP)
You must supply in ADR+1 the number of words of information that you want
returned. (Currently =15 values is the maximum possible.) If more values
are ever added to the table, this will allow old programs to run without
error. Those entries marked (TCP) have meaning only if the connection is
a TCP connection. (As opposed to UDP or other protocols.)
386. The IP User Datagram Protocol (UDP) is available using the device IMP. It
is not possible (or meaningful) to intermix UDP and TCP operations on the
same IMP channel. However, a closed IMP channel may be reused for either
TCP or UDP without releasing it.
The IN and OUT UUOs are used to read and send UDP packets. Each IN or OUT
always corresponds to a single packet. On input, if the packet is longer
than the user buffer, the UUO will fail with the IOBKTL bit set in the I/O
status word. On output, the data must fit in a single buffer. If you try
to send more than the system can put in a packet, output will fail with
IOBKTL set in the I/O status word. Either buffered or dump mode may be
used, but buffered mode is recommended since there is no way to specify an
exact byte count in dump mode.
While there is no "connection" as in TCP, you still have to tell the
system the foreign host and port number and the local port number
associated with the I/O channel. They must all be non-zero if the first
I/O operation is an output (the local port may be -1 to ask the system to
assign a free port), but the foreign host and port may be 0 when doing
input, to ask for packets from any foreign host and/or port. If this is
done, then when a packet is read the foreign host and port will
automatically be set to the values in that packet, so that subsequent
input and output will use those values, unless they are reset to 0.
When a packet arrives that matches your connection, it will be discarded
if there is a previous packet waiting that you have not read yet. This
should not get in the way of most applications, since they typically
involve an exchange of single packets, or acknowledgement of each packet
before the next is sent.
The following IMP MTAPE has been added to support UDP:
MTAPE <chan>,ADR
ADR: 26 ;Set UDP host and port
ADR+1: <status bits returned>
ADR+2: <local port>
ADR+3: <unused>
ADR+4: <unused>
ADR+5: <foreign port>
ADR+6: <foreign host>
This MTAPE first discards any UDP packets waiting to be read, and then
sets the host and UDP port numbers for the I/O channel. The <local port>
may be -1 if you want the system to generate a new port number; in that
case the number generated will be returned in ADR+2. The foreign host and
port may be 0 (to match any host and/or port) if you read a packet before
you attempt to write one.
An error code will be returned in ADR+1 if you are not in the right state
to perform this operation (i.e., you have an open TCP connection).
After a successful return, subsequent input and output UUOs on this
channel will read and send UDP packets as described above.
The following IMP MTAPEs are meaningful for UDP as well as for TCP:
2 Get status bits
5 Extended status
6 Wakeup main process from interrupt level
7 Get local port, foreign port, and foreign host
10 Skip if input waiting
17 Set timeouts
20 Get timeouts
The only timeout value that is used in UDP is the input timeout.
387. Device MTU0 is a TU-78 9-track magtape drive, capable of writing at
1600 or 6250 bpi. The density is specified by the device I/O status
word, bits 27:28. If both are on, the density will be 6250; otherwise
the density will be 1600. Note that when reading a tape, the TU-78
automatically senses and selects the density at which the tape was
written. For use of DART and COPY with the TU-78 (MTU0), see
MONCOM.UPD[S,DOC].
388. The following ages-old fact has apparently not been documented before.
When a user types a carriage return with any combination of bucky bits
(CONTROL and/or META), the CR appears in the TTY input buffer without
any bucky bits followed by a LF with whatever bucky bits were typed.
389. Lowcore location 357 contains bits indicating which spoolers exist at
the particular WAITS sites. The bit for a spooler is on if and only
if that spooler/printer exists at this site. The bits are (in octal):
1(xgp), 2(lpt), 4(dover), 10(boise), 20(imprint), 40(esp),
100(rover), 200(plover)
390. Another ages-old fact is that the system will not allow you to have
a piece of paper smaller than 2 lines. The DPYSIZ UUO, if given an
arg specifying a 1-line piece of paper, will give you a
2-line piece of paper (1 glitch of 2 lines).